<?php
/**
 * Copyright (c) 2018,2345
 * 摘    要：Redis 类程序
 * 作    者：林幸亿
 * 修改日期：2018.04.20
 */

/*
 * 参考网址
 * https://joshtronic.com/2013/07/29/mysql-and-redis-command-equivalents/
 * https://scotch.io/tutorials/getting-started-with-redis-in-php
 * https://www.sitepoint.com/an-introduction-to-redis-in-php-using-predis/
 * http://blog.sina.com.cn/s/blog_56c9b55c0100ybno.html
 * https://www.thegeekstuff.com/2014/02/phpredis/
 */

require "vendor/autoload.php";
Predis\Autoloader::register();


class RedisDb
{
    // Hold the class instance.
    private static $instance = null;
    private $conn;
    
    //数据库的建立
    private $dbHost = 'localhost';
    private $dbUsername = 'root';
    private $dbUserPassword = '';

    /**
     * 功    能：The db connection is established in the private constructor.
     * 修改日期：2018-4-18
     */
    private function __construct()
    {
        try
        {
            $this->conn = new Predis\Client();
            
            /*
            $this->conn = new PredisClient(array(
                "scheme" => "tcp",
                "host" => $dbHost,
                "port" => 6379));
            */
            
        }
        catch (Exception $e)
        {
            die($e->getMessage());
        }
    }
  
    /**
     * 修改日期：2018-4-18
     */
    public static function getInstance()
    {
        if(! self::$instance)
        {
            self::$instance = new RedisDb();
        }

        return self::$instance;
    }

    /**
     * 修改日期：2018-4-18
     */
    public function getConnection()
    {
        return $this->conn;
    }

    /**
     * 功    能：用于选择一组数据。 Get the value of a key
     * 修改日期：2018-4-18
     *
     * @param string $key 
     * @return string or boolean false
     */
    public function get($key)
    {
        if($this->conn->exists($key) === true)
        {
            return $this->conn->get($key);
        }
        
        return false;
    }
    
    /**
     * 功    能：用于选择一组数据。 Get all value of a key
     * 修改日期：2018-4-20
     *
     * @param string $key 
     * @return array
     */
    public function hgetall($key)
    {
        $data = $this->conn->hgetall($key);
        return $data;
    }

    /**
     * 功    能：Set a key valued pair.
     * 修改日期：2018-4-18
     *
     * @param string $key
     * @param string $value
     * @return boolean
     */
    public function set($key, $value)
    {
        $this->conn->set($key, $value);
        $result = $this->conn->exists($key) ? true : false;

        return $result;
    }
    
    /**
     * 功    能：Get one or more value from a hash key.
     * 修改日期：2018-4-20
     *
     * @param string $key
     * @param array $value
     * @return array
     */
    public function hmget($key, $array)
    {
        $result = $this->conn->hmget($key, $array);

        return $result;
    }

    /**
     * 功    能：Set a hash key with value.
     * 修改日期：2018-4-20
     *
     * @param string $key
     * @param array $value
     * @return boolean
     */
    public function hmset($key, $array)
    {
        $result = $this->conn->hmset($key, $array);
    }

    /**
     * 功    能：Delete the value of key
     * 修改日期：2018-4-20
     *
     * @param string $key
     */
    public function del($key)
    {
        $this->conn->del($key);
    }
    
    /**
     * 功    能：Increment the value of key.
     * 修改日期：2018-4-20
     *
     * @param string $key
     * @return string
     */
    public function incr($key)
    {
        $result = $this->conn->incr($key);
        
        return $result;
    }
}

?>